HerokuでCluster modeのnode.jsプロセスを起動するとそれぞれがメモリを手加減なしに使おうとするので--max-old-space-sizeの指定が必須
実装したので経過観察
Node.js 22あたりのメモリ使用量の挙動はこんな感じ、のはずshokai.icon
サーバー環境にある最大メモリ量を認知しており、ギリギリまで使おうとする
基本的には、1プロセスあたり1.5GB弱までしかメモリ確保しない
V8の仕様
2プロセスが1.5GBまで使おうとする
ちょっとオーバーしてもいいよ
オーバーし続けたらkillするけど
これがCosenseの運用ではちょうど良いだろうshokai.icon
全てのプロセスに一貫して--max-old-space-size指定してしまうと、batch処理とかにも影響を与えてしまう
--max-old-space-sizeなど、nodeの環境変数オプションを何でも渡せる
下手にcluster数で割り算するとか、気の利かせた事はしない
シンプルにNODE_OPTIONSを露出させる
その方式では、メモリ量しか設定できない
「環境変数WEB_MEMORYがあったら--max-old-space-sizeが自動的にセットされる」という仕様は、たぶん真面目にnode.jsアプリの運用やチューニングをやる時に邪魔になるshokai.icon
https://gyazo.com/01a3e7f4eb8b3be5d91d8481636fb859
cluster modeでは、親プロセスの環境変数は子プロセスに引き継がれる仕様があるが
https://gyazo.com/deb46f9dc938d70dde77a91d11202fec
https://gyazo.com/72833935a54be1cfd22030e331de42d7
https://gyazo.com/9f940b92a5419651ce73778aa2dea37f
masterにもworkerにも何も設定されない事がわかる